package etp.client;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class AppointmentModel{

	private List<Apontamento> apontamento = new ArrayList<Apontamento>();

	private List<AppointmentModelListener> listeners = 
		new ArrayList<AppointmentModelListener>();
	
	public void addApontamentoListener(AppointmentModelListener listener){
		this.listeners.add(listener);
	}
	
	public void removeApontamentoListener(AppointmentModelListener listener){
		this.listeners.remove(listener);
	}
	
	public void addApontamento(Apontamento e) {
		apontamento.add(e);
		this.fireAppointmentAdded(e);
	}

	public void addAll(Collection<? extends Apontamento> c) {
		for(Apontamento app : c){
			this.addApontamento(app);
		}
	}

	public Apontamento getApontamento(int index) {
		return apontamento.get(index);
	}
	
	public void removeApontamento(Apontamento app){
		this.apontamento.remove(app);
		
		this.fireAppointmentRemoved(app);
	}
	
	public void clear(){
		for(Apontamento app : this.apontamento){
			this.removeApontamento(app);
		}
	}
	
	public int getApontamentoCount() {
		return apontamento.size();
	}
	
	protected void fireAppointmentAdded(Apontamento app){
		for(AppointmentModelListener listener : this.listeners){
			listener.includedAppointment(app,this);
		}
	}
	
	protected void fireAppointmentRemoved(Apontamento app){
		for(AppointmentModelListener listener : this.listeners){
			listener.removedAppointment(app,this);
		}
	}
	
	protected void fireAppointmentUpdated(Apontamento app){
		for(AppointmentModelListener listener : this.listeners){
			listener.updateAppointment(app,this);
		}
	}
}
